package singletonpattern;

/**
 * 懒汉式（线程安全）单例模式
 *懒汉式，线程安全
 *是否 Lazy 初始化：是
 *是否多线程安全：是
 *实现难度：易
 *描述：这种方式具备很好的 lazy loading，能够在多线程中很好的工作，但是，效率很低，99% 情况下不需要同步。
 *优点：第一次调用才初始化，避免内存浪费。
 *缺点：必须加锁 synchronized 才能保证单例，但加锁会影响效率。
 *getInstance() 的性能对应用程序不是很关键（该方法使用不太频繁）。
 */
public class LazySafeSingletonObject {

    /**
     * 私有化构造函数，防止外界调用构造函数初始化对象
     */
    private LazySafeSingletonObject() {
    }

    private static LazySafeSingletonObject singletonObject;

    /**
     *获取唯一可用对象
     */
    public static synchronized LazySafeSingletonObject getInstant() {
        if (singletonObject == null) {
            singletonObject = new LazySafeSingletonObject();
        }
        return singletonObject;
    }

    public void showMsg(String msg) {
        System.out.println(msg);
    }
}
